/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;
import fisica.CapaFisica;
import fisica.ComposicionMedicamentoFisica;
import hibernate.objeto.ComposicionMedicamento;

/**
 *
 * @author Gonzalo
 */
class ComposicionMedicamentoLogica extends CapaLogica {


    /**
     * Crea y persiste la composición de la composición del medicamento.
     *
     * @param datosMedicamento Los datos de la composición
     * creada para su posterior recuperación
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarOModificarComposicionMedicamento(
            Object[] datosMedicamento, int[] idComposicionMedicamento) {
        //Crea el objeto
        ComposicionMedicamento composicionMedicamento =
                crearUObtenerObjetoComposicionMedicamento(datosMedicamento);

        //Persiste el objeto
        if (CapaFisica.guardarOActualizarObjeto(composicionMedicamento)) {
            idComposicionMedicamento[0] = composicionMedicamento
                    .getIdComposicionMedicamento();
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea el objeto Composicion.
     *
     * @param datosMedicamento Los datos de la composición
     * @return El objeto creado
     */
    private static ComposicionMedicamento crearUObtenerObjetoComposicionMedicamento(
            Object[] datosMedicamento) {
        
        if (datosMedicamento[
                    CapaLogica.MEDICAMENTO_COMPOSICION_NOMBRE_COMERCIAL].toString() == null) {
            datosMedicamento[
                    CapaLogica.MEDICAMENTO_COMPOSICION_NOMBRE_COMERCIAL] = "";
        }

        ComposicionMedicamento retorno =
                getComposicionMedicamentoPorNombreYEnBd(datosMedicamento[
                    CapaLogica.MEDICAMENTO_COMPOSICION_NOMBRE_COMERCIAL]
                    .toString());
        
        if (retorno == null) {
            retorno = new ComposicionMedicamento();
            retorno.setDescripcionComposicionMedicamento(datosMedicamento[
                    CapaLogica.MEDICAMENTO_COMPOSICION_NOMBRE_COMERCIAL]
                    .toString());
            retorno.setEnBdComposicionMedicamento(true);
        }
        return retorno;
    }

    /**
     * Retorna el objeto Composicion según la descripcion composicion.
     *
     * @param descripcionComposicionMedicamento La descripción de la composición
     * del medicamento
     * @return El objeto Composicion consultado, null si no existe
     */
    private static ComposicionMedicamento getComposicionMedicamentoPorNombreYEnBd(
            String descripcionComposicion) {
        return ComposicionMedicamentoFisica.getComposicionMedicamentoPorNombreYEbBd(
                reemplazarUnApostrofoPorDosApostrofos(descripcionComposicion),
                true);
    }

     /**
     * Retorna el objeto ComposicionMedicamento según el id.
     *
     * @param idComposicionMedicamento  El id de la composición medicamento
     * @return El objeto ComposicionMedicamento consultado, null si no existe
     */
    static ComposicionMedicamento getComposicionMedicamentoPorId(
            int idComposicionMedicamento) {
        return ComposicionMedicamentoFisica
                .getComposicionMedicamentoPorId(idComposicionMedicamento);
    }
}
